import axios from "axios";
// import querystring from "querystring"


class Request {
  //构造函数
  constructor() {
    //创建请求的实例对象
    this.instance = axios.create({
      //网络请求公共配置
      baseURL: 'http://192.168.70.7:8000',
      timeout: 5000, //请求超时时间
    })

    this.errorHandle = (status, info) => {
      switch (status) {
        case 400:
          console.log("语法有误");
          break;
        case 401:
          console.log("服务器认证失败");
          break;
        case 403:
          console.log("服务器拒绝访问");
          break;
        case 404:
          console.log("地址错误");
          break;
        case 500:
          console.log("服务器遇到意外");
          break;
        case 502:
          console.log("服务器无响应");
          break;
        default:
          console.log(info);
          break;
      }
    }





    // 发送请求的拦截
    this.instance.interceptors.request.use((config) => {
      //先根据config.withoutToken判断是否需要加token在header中
      if (!config.withoutToken) {
        //给请求设置header,header上加token的配置
        config.headers = {
          "Authorization": 'Bearer ' + localStorage.getItem('token')
        };
      }


      // 在发送请求之前做些什么
      if (config.method === "post") {
        // config.data = querystring.stringify(config.data)
      }
      //放行
      return config;

    },
      (error) => {
        // 对请求错误做些什么
        return Promise.reject(error);
      }

    );

    // 响应的拦截
    this.instance.interceptors.response.use(
      //响应成功的拦截
      (response) => {
        //获取后台响应的数据给外部使用，不需要整个response对象给到外部。
        return response.status === 200 ? Promise.resolve({ data: response.data, error: null }) : Promise.reject({ data: response.data, error: null });
      },
      //响应失败的拦截
      (error) => {

        this.errorHandle(error.status, error.info)


        // if(error.response){
        //   const status = error.response.status;
        //   //服务器响应了，但是报错了。状态码超过了200
        //   if(status >= 400 && status < 500){
        //     Toast(error.response.data.message);
        //   }
        //   else if(status >= 500){
        //     Toast('服务器错误');
        //   }

        // }else if(error.request){
        //   if(window.navigator.onLine){
        //     Toast('服务器异常');
        //   }else{
        //     Toast('网络异常');
        //   }

        // }else{
        //   Toast('客户端错误');
        // }
        return { data: null, error: error };
      }
    )

  }


  get(url, data = {}, config = {}) {
    return this.instance({
      url,
      method: "GET",
      params: data,
      ...config,
    });
  }

  post(url, data = {}, config = {}) {
    return this.instance({
      url,
      method: "POST",
      data,
      ...config,
    });
  }

  put(url, data = {}, config = {}) {
    return this.instance({
      url,
      method: "PUT",
      data,
      ...config,
    });
  }

  patch(url, data = {}, config = {}) {
    return this.instance({
      url,
      method: "PATCH",
      data,
      ...config,
    });
  }

  delete(url, data = {}, config = {}) {
    return this.instance({
      url,
      method: "DELETE",
      params: data,
      ...config,
    });
  }
}

export default new Request();

